From a6084cb680598cc6257c9fc7d8d49986ba18fe02 Mon Sep 17 00:00:00 2001 From: Debian Qt/KDE Maintainers Date: Thu, 11 Dec 2025 13:02:24 +0300 Subject: [PATCH] QML: fortify qmlExecuteDeferred some more Origin: upstream, https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=f69b6f0940b178b4 Last-Update: 2024-11-07 Gbp-Pq: Name fortify_qmlexecutedeferred.patch --- src/qml/qml/qqmlengine.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 4337a7f45..5d76f1dfa 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -1583,17 +1583,23 @@ void qmlExecuteDeferred(QObject *object) { QQmlData *data = QQmlData::get(object); - if (data && !data->deferredData.isEmpty() && !data->wasDeleted(object)) { - QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine); + if (!data + || !data->context + || !data->context->engine + || data->deferredData.isEmpty() + || data->wasDeleted(object)) { + return; + } - QQmlComponentPrivate::DeferredState state; - QQmlComponentPrivate::beginDeferred(ep, object, &state); + QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine); - // Release the reference for the deferral action (we still have one from construction) - data->releaseDeferredData(); + QQmlComponentPrivate::DeferredState state; + QQmlComponentPrivate::beginDeferred(ep, object, &state); - QQmlComponentPrivate::completeDeferred(ep, &state); - } + // Release the reference for the deferral action (we still have one from construction) + data->releaseDeferredData(); + + QQmlComponentPrivate::completeDeferred(ep, &state); } QQmlContext *qmlContext(const QObject *obj) -- 2.30.2